home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / pd / netz / term / extras / source / term-source.lha / ClipPanel.c < prev    next >
C/C++ Source or Header  |  1995-06-17  |  7KB  |  359 lines

  1. /*
  2. **    ClipPanel.c
  3. **
  4. **    Editing panel for clipboard configuration
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_UNIT=1000,GAD_USE,GAD_CANCEL,GAD_DEFAULT,
  13.         GAD_PAGER,GAD_PAGEGROUP
  14.     };
  15.  
  16. STATIC STRPTR __saveds
  17. ShowTime(struct Gadget *SomeGadget,WORD Level)
  18. {
  19.     return(LocaleSeconds(Level));
  20. }
  21.  
  22. BYTE __regargs
  23. ClipPanel(struct Configuration *Config,BYTE *Default)
  24. {
  25.     STATIC LONG PageTitleID[3] =
  26.     {
  27.         MSG_V36_0019,
  28.         MSG_V36_0020,
  29.         -1
  30.     };
  31.  
  32.     STATIC BYTE         InitialPage = 0;
  33.  
  34.     struct LayoutHandle    *Handle;
  35.     BYTE             Cancel = FALSE;
  36.     STRPTR             PageTitle[3];
  37.  
  38.     LocalizeStringTable(PageTitle,PageTitleID);
  39.  
  40.     SaveConfig(Config,PrivateConfig);
  41.  
  42.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  43.         LH_LocaleHook,    &LocaleHook,
  44.         LH_ExitFlush,    FALSE,
  45.     TAG_DONE))
  46.     {
  47.         struct Window *PanelWindow;
  48.  
  49.         LT_New(Handle,
  50.             LA_Type,    VERTICAL_KIND,
  51.         TAG_DONE);
  52.         {
  53.             LT_New(Handle,
  54.                 LA_Type,VERTICAL_KIND,
  55.             TAG_DONE);
  56.             {
  57.                 LT_New(Handle,
  58.                     LA_Type,    CYCLE_KIND,
  59.                     LA_ID,        GAD_PAGER,
  60.                     LA_LabelID,    MSG_XFER_PAGE_TXT,
  61.                     GTCY_Labels,    PageTitle,
  62.                     LACY_AutoPageID,GAD_PAGEGROUP,
  63.                     LACY_TabKey,    TRUE,
  64.                     LA_BYTE,    &InitialPage,
  65.                 TAG_DONE);
  66.  
  67.                 LT_EndGroup(Handle);
  68.             }
  69.  
  70.             LT_New(Handle,
  71.                 LA_Type,    VERTICAL_KIND,
  72.                 LA_ID,        GAD_PAGEGROUP,
  73.                 LAGR_Frame,    TRUE,
  74.                 LAGR_ActivePage,InitialPage,
  75.             TAG_DONE);
  76.             {
  77.                 LT_New(Handle,
  78.                     LA_Type,    VERTICAL_KIND,
  79.                 TAG_DONE);
  80.                 {
  81.                     LT_New(Handle,
  82.                         LA_Type,    VERTICAL_KIND,
  83.                     TAG_DONE);
  84.                     {
  85.                         LT_New(Handle,
  86.                             LA_Type,        INTEGER_KIND,
  87.                             LA_LabelID,        MSG_CLIPPANEL_UNIT_GAD,
  88.                             LA_WORD,        &Config -> ClipConfig -> ClipboardUnit,
  89.                             LA_Chars,        20,
  90.                             LAIN_Min,        0,
  91.                             LAIN_Max,        255,
  92.                             LA_ID,            GAD_UNIT,
  93.                             LAIN_UseIncrementers,    TRUE,
  94.                             GTIN_MaxChars,        3,
  95.                         TAG_DONE);
  96.  
  97.                         LT_New(Handle,
  98.                             LA_Type,    XBAR_KIND,
  99.                         TAG_DONE);
  100.  
  101.                         LT_New(Handle,
  102.                             LA_Type,    STRING_KIND,
  103.                             LA_LabelID,    MSG_CLIPPANEL_PASTE_PREFIX_GAD,
  104.                             LA_STRPTR,    Config -> ClipConfig -> InsertPrefix,
  105.                             GTST_MaxChars,    79,
  106.                         TAG_DONE);
  107.  
  108.                         LT_New(Handle,
  109.                             LA_Type,    STRING_KIND,
  110.                             LA_LabelID,    MSG_CLIPPANEL_PASTE_SUFFIX_GAD,
  111.                             LA_STRPTR,    Config -> ClipConfig -> InsertSuffix,
  112.                             GTST_MaxChars,    79,
  113.                         TAG_DONE);
  114.  
  115.                         LT_New(Handle,
  116.                             LA_Type,    XBAR_KIND,
  117.                         TAG_DONE);
  118.  
  119.                         LT_EndGroup(Handle);
  120.                     }
  121.  
  122.                     LT_New(Handle,
  123.                         LA_Type,    VERTICAL_KIND,
  124.                     TAG_DONE);
  125.                     {
  126.                         LT_New(Handle,
  127.                             LA_Type,    CHECKBOX_KIND,
  128.                             LA_LabelID,    MSG_CONVERT_LF_TXT,
  129.                             LA_BYTE,    &Config -> ClipConfig -> ConvertLF,
  130.                         TAG_DONE);
  131.  
  132.                         LT_EndGroup(Handle);
  133.                     }
  134.  
  135.                     LT_EndGroup(Handle);
  136.                 }
  137.  
  138.                 LT_New(Handle,
  139.                     LA_Type,    VERTICAL_KIND,
  140.                 TAG_DONE);
  141.                 {
  142.                     LT_New(Handle,
  143.                         LA_Type,    VERTICAL_KIND,
  144.                     TAG_DONE);
  145.                     {
  146.                         LT_New(Handle,
  147.                             LA_Type,    CYCLE_KIND,
  148.                             LA_LabelID,    MSG_CLIPPANEL_TEXT_PACING_GAD,
  149.                             LA_UBYTE,    &Config -> ClipConfig -> PacingMode,
  150.                             LACY_FirstLabel,MSG_CLIPPANEL_DIRECT_TXT,
  151.                             LACY_LastLabel,    MSG_CLIPPANEL_KEYDELAY_TXT,
  152.                         TAG_DONE);
  153.  
  154.                         LT_EndGroup(Handle);
  155.                     }
  156.  
  157.                     LT_New(Handle,
  158.                         LA_Type,    VERTICAL_KIND,
  159.                         LA_LabelID,    MSG_V36_0021,
  160.                     TAG_DONE);
  161.                     {
  162.                         LT_New(Handle,
  163.                             LA_Type,        SliderType,
  164.                             LA_LabelID,        MSG_CLIPPANEL_CHAR_DELAY_GAD,
  165.                             GTSL_Min,        0,
  166.                             GTSL_Max,        10 * 100,
  167.                             LA_Chars,        10,
  168.                             LA_WORD,        &Config -> ClipConfig -> CharDelay,
  169.                             GTSL_LevelFormat,    "%s s",
  170.                             GTSL_DispFunc,        ShowTime,
  171.                         TAG_DONE);
  172.  
  173.                         LT_New(Handle,
  174.                             LA_Type,        SliderType,
  175.                             LA_LabelID,        MSG_CLIPPANEL_LINE_DELAY_GAD,
  176.                             GTSL_Min,        0,
  177.                             GTSL_Max,        10 * 100,
  178.                             LA_Chars,        10,
  179.                             LA_WORD,        &Config -> ClipConfig -> LineDelay,
  180.                             GTSL_LevelFormat,    "%s s",
  181.                             GTSL_DispFunc,        ShowTime,
  182.                         TAG_DONE);
  183.  
  184.                         LT_EndGroup(Handle);
  185.                     }
  186.  
  187.                     LT_New(Handle,
  188.                         LA_Type,    VERTICAL_KIND,
  189.                         LA_LabelID,    MSG_V36_0024,
  190.                     TAG_DONE);
  191.                     {
  192.                         LT_New(Handle,
  193.                             LA_Type,        STRING_KIND,
  194.                             LA_LabelID,        MSG_CLIPPANEL_LINE_PROMPT_GAD,
  195.                             LA_STRPTR,        Config -> ClipConfig -> LinePrompt,
  196.                             LA_Chars,        10,
  197.                             GTST_MaxChars,        255,
  198.                         TAG_DONE);
  199.  
  200.                         LT_New(Handle,
  201.                             LA_Type,        SliderType,
  202.                             LA_LabelID,        MSG_CLIPPANEL_SEND_TIMEOUT_GAD,
  203.                             GTSL_Min,        0,
  204.                             GTSL_Max,        10 * 100,
  205.                             LA_WORD,        &Config -> ClipConfig -> SendTimeout,
  206.                             GTSL_LevelFormat,    "%s s",
  207.                             GTSL_DispFunc,        ShowTime,
  208.                         TAG_DONE);
  209.  
  210.                         LT_EndGroup(Handle);
  211.                     }
  212.  
  213.                     LT_EndGroup(Handle);
  214.                 }
  215.  
  216.                 LT_EndGroup(Handle);
  217.             }
  218.  
  219.             LT_New(Handle,
  220.                 LA_Type,VERTICAL_KIND,
  221.             TAG_DONE);
  222.             {
  223.                 LT_New(Handle,
  224.                     LA_Type,    XBAR_KIND,
  225.                     LAXB_FullSize,    TRUE,
  226.                 TAG_DONE);
  227.  
  228.                 LT_EndGroup(Handle);
  229.             }
  230.  
  231.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  232.                 LAGR_SameSize,    TRUE,
  233.                 LAGR_Spread,    TRUE,
  234.             TAG_DONE);
  235.             {
  236.                 LT_New(Handle,
  237.                     LA_Type,    BUTTON_KIND,
  238.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  239.                     LA_ID,        GAD_USE,
  240.                     LABT_ReturnKey,    TRUE,
  241.                     LABT_ExtraFat,    TRUE,
  242.                 TAG_DONE);
  243.  
  244.                 if(Default)
  245.                 {
  246.                     LT_New(Handle,
  247.                         LA_Type,    BUTTON_KIND,
  248.                         LA_LabelID,    MSG_GLOBAL_DEFAULT_GAD,
  249.                         LA_ID,        GAD_DEFAULT,
  250.                         LABT_ExtraFat,    TRUE,
  251.                     TAG_DONE);
  252.                 }
  253.  
  254.                 LT_New(Handle,
  255.                     LA_Type,    BUTTON_KIND,
  256.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  257.                     LA_ID,        GAD_CANCEL,
  258.                     LABT_EscKey,    TRUE,
  259.                     LABT_ExtraFat,    TRUE,
  260.                 TAG_DONE);
  261.  
  262.                 LT_EndGroup(Handle);
  263.             }
  264.  
  265.             LT_EndGroup(Handle);
  266.         }
  267.  
  268.         if(PanelWindow = LT_Layout(Handle,LocaleString(MSG_CLIPPANEL_CLIP_SETTINGS_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  269.             LAWN_HelpHook,        &GuideHook,
  270.             LAWN_Parent,        Window,
  271.             WA_DepthGadget,        TRUE,
  272.             WA_CloseGadget,        TRUE,
  273.             WA_DragBar,        TRUE,
  274.             WA_RMBTrap,        TRUE,
  275.             WA_Activate,        TRUE,
  276.         TAG_DONE))
  277.         {
  278.             struct IntuiMessage    *Message;
  279.             BOOLEAN             Done = FALSE;
  280.             ULONG             MsgClass,
  281.                          MsgQualifier;
  282.             UWORD             MsgCode;
  283.             struct Gadget        *MsgGadget;
  284.  
  285.             GuideContext(CONTEXT_CLIP);
  286.  
  287.             PushWindow(PanelWindow);
  288.  
  289.             LT_ShowWindow(Handle,TRUE);
  290.  
  291.             do
  292.             {
  293.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  294.                 {
  295.                     SaveConfig(PrivateConfig,Config);
  296.  
  297.                     break;
  298.                 }
  299.  
  300.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort))
  301.                 {
  302.                     MsgClass    = Message -> Class;
  303.                     MsgQualifier    = Message -> Qualifier;
  304.                     MsgCode        = Message -> Code;
  305.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  306.  
  307.                     GT_ReplyIMsg(Message);
  308.  
  309.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  310.  
  311.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  312.                     {
  313.                         SaveConfig(PrivateConfig,Config);
  314.  
  315.                         Done = TRUE;
  316.                     }
  317.  
  318.                     if(MsgClass == IDCMP_GADGETUP)
  319.                     {
  320.                         switch(MsgGadget -> GadgetID)
  321.                         {
  322.                             case GAD_USE:
  323.  
  324.                                 LT_UpdateStrings(Handle);
  325.  
  326.                                 Done = TRUE;
  327.                                 break;
  328.  
  329.                             case GAD_CANCEL:
  330.  
  331.                                 SaveConfig(PrivateConfig,Config);
  332.  
  333.                                 Cancel = Done = TRUE;
  334.                                 break;
  335.  
  336.                             case GAD_DEFAULT:
  337.  
  338.                                 *Default = TRUE;
  339.  
  340.                                 Done = TRUE;
  341.                                 break;
  342.                         }
  343.                     }
  344.                 }
  345.             }
  346.             while(!Done);
  347.  
  348.             PopWindow();
  349.         }
  350.  
  351.         LT_DeleteHandle(Handle);
  352.     }
  353.  
  354.     if(Default)
  355.         return((BYTE)(!Cancel));
  356.     else
  357.         return((BYTE)memcmp(PrivateConfig -> ClipConfig,Config -> ClipConfig,sizeof(struct ClipSettings)));
  358. }
  359.